package modele;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

/**
 * Class ConnexionBD qui gère la connexion à la base postgreSQL miage
 */
public class ConnexionBD {

    /**
     * Nom du driver
     */
    protected static final String DRIVER_NAME="org.postgresql.Driver";
    /**
     * URL de la base de données
     */
    protected static final String URL="jdbc:postgresql://localhost:5432/miage";
    /**
     * utilisateur de la Database
     */
    protected static final String USER="miageadmin";
    /**
     * Mot de passe de l'utilisateur
     */
    protected static final String PASSWORD="miageadmin";

    static{

        try {
           Class.forName(DRIVER_NAME).newInstance();
           System.out.println("*** Driver loaded.");
        }
        catch(ClassNotFoundException e){
           System.err.println("Erreur : Driver "+DRIVER_NAME+" non trouver");
           System.err.println(e.getMessage());
        }
        catch(InstantiationException e){
           System.err.println("Erreur : Imposssible de créer une instance de "+DRIVER_NAME);
           System.err.println(e.getMessage());
        }
        catch(IllegalAccessException e){
           System.err.println("Erreur : Imposssible de créer une instance de "+DRIVER_NAME);
           System.err.println(e.getMessage());
        }

    }

    /**
     * Récupère un objet connection après s'etre connecté à la base de données
     * @return l'objet connection
     * @throws SQLException
     */
    public static Connection getConnection()throws SQLException {

        return DriverManager.getConnection(URL, USER, PASSWORD);

    }

    /** Ferme une connexion, si elle est non null.
    * Si une exception SQLException est levée, ne la propage pas.
    */
    public static void close(final Connection c) throws SQLException{
        if(c!=null){
            try{
            c.close();
            }
            catch(SQLException e){
                System.err.println("Impossible de fermer la Connection");
                System.err.println(e.getMessage());
            }
        }
    }

    /** Ferme une requête SQL, si elle est non null.
    * Si une exception SQLException est levée, ne la propage pas.
    */
    public static void close(final Statement st)throws SQLException{
        if(st!=null){

            try{
                st.close();
            }
            catch(SQLException e){
                System.err.println("Impossible de fermer Statement");
                System.err.println(e.getMessage());
            }
        }
    }

    /** Ferme un ResultSet, s'il est non null.
    * Si une exception SQLException est levée, ne la propage pas.
    */
    public static void close(final ResultSet rs)throws SQLException{
        if(rs!=null){
            try{
                rs.close();
            }
            catch(SQLException e){
               System.err.println("Impossible  de fermer ResultSet");
               System.err.println(e.getMessage());
            }
        }
    }


}

